package pos.data;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class ConnectionManager {
	private static ConnectionManager cm;
	private Driver dBDriver = null;
	private static Properties dbprops = new Properties();

	private ConnectionManager() {

		try {
			//Accedemos al archivo de properties dbconfiguration.properties
			InputStream is = Thread.currentThread().getContextClassLoader()
					.getResourceAsStream("dbconfiguration.properties");
			dbprops.load(is);
		} catch (Exception e1) {
			System.err
					.println("El fichero de propiedades de la BDs no se ha encontrado");
			e1.printStackTrace();
		}

		try {//Accedemos y guardamos el nombre del driver
			String driverName = dbprops.getProperty("driverName");
			//creamos la instancia del driver
			dBDriver = (Driver) Class.forName(driverName).newInstance();
			//registramos el driver
			DriverManager.registerDriver(dBDriver);
		} catch (Exception e) {
			System.err.println("Unable to register JDBC Driver");
			e.printStackTrace();
		}
	}

	public static synchronized ConnectionManager getInstance() {
		if (cm == null) {
			cm = new ConnectionManager();
		}
		return cm;
	}

	public Connection checkOut() {
		Connection conn = null;

		try {
			String uri = dbprops.getProperty("dBUri");
			String user = dbprops.getProperty("username");
			String passwd = dbprops.getProperty("password");
			conn = DriverManager.getConnection(uri, user, passwd);
		} catch (Exception e) {
			System.err.println("Unable to open a new JDBC connection");
			e.printStackTrace();
		}

		return conn;
	}

	public void checkIn(Connection conn) {
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	protected void finalize() {
		try {
			DriverManager.deregisterDriver(dBDriver);
		} catch (SQLException e) {
			System.err.println("Unable to deregister JDBC driver");
			e.printStackTrace();
		}

	}
}